#include "Comm.hpp"

class init
{
public:
    //创建命名管道
    init()
    {
        //创建的权限
        int n = mkfifo(gpath.c_str(),gmode);
        if(n < 0)
        {
            cerr<<"mkfifo failed"<<endl;
            return;
        }
        cout<<"mkfifo create success"<<endl;
    }
    ~init()
    {
        //删除文件
        int n = unlink(gpath.c_str());
        if(n < 0)
        {
            cerr<<"unlink failed"<<endl;
            return;
        }
        cout<<"delete success"<<endl;
    }
private:
};
//创建全局变量
init Init;

class server
{
public:
    //构造函数,最开始没有管道所有将fd初始化为-1
    server():_fd(gfd)
    {

    }
    //析构函数   
    ~server(){}
    //打开管道
    bool openpipe()
    {
        //以读的方式打开
        _fd = open(gpath.c_str(),O_RDONLY);
        if(_fd < 0)
        {
            cerr<<"open failed"<<endl;
            return false;
        }
        return true;
    }
    //收消息
    int recvmessage(string *out)
    {
        char buffer[gsize];
        ssize_t  n = read(_fd,buffer,sizeof(buffer)-1);
        if(n > 0)
        {
            buffer[n]=0;
            *out = buffer;
        }
        //返回字节数
        return n;
    }
    //关闭管道
    void closepipe()
    {
        int n = close(_fd);
        if(n < 0)
        {
            cerr<<"close failed"<<endl;
            return;
        }
    }
private:
    //打开管道需要文件描述符
    int _fd;
};